Projet PI² Mooveo - Vincent DEBANDE, Clément LAJOUX, Ludovic CHEVALLIER, Simon PONGAN

Clusterisation d'une base de données


Dans le cadre de notre projet PI² avec Mooveo (Startup de gestion de talents), une base de données contenant des Jobs et des Skills nous ont été fournis.
Nous devons réaliser un clustering des skills.

Compréhension de la base de données

Dans un premier temps nous avons analyser la base de données pour voir de quoi elle était constituée.
Un job a une liste de 20 skills.

Il y a 349 jobs pour 960 skills.

Nous avons donc mis sous forme de DataFrame ces données. En ligne un skill, en colonnes les jobs. Si un skill apparaît dans un job, la modalité est à TRUE, FALSE sinon.

Le but étant d'appliquer un Hierarchical Clusstering Algorithm sur nos données.

Pour savoir si deux variables sont liées ou non, il faut pouvoir calculer une distance entre elles. Puisque nous avons des variables qualitative, nous avons utiliser non pas la distance Euclidienne, mais la Dice Distance.

Dice Distance

Elle varie entre 0 et 1 :

Comment la calculer ?

Avec d'autres mots :

Pour deux individus, c'est le nombre de colonnes qui n'ont pas la même valeur / ((2 * le nombre de colonnes qui sont à TRUE pour les deux) + le nombre de colonnes qui n'ont pas la même valeur

Heat map

Pour mieux visualiser cette matrice, nous l'avons affiché sous forme de Heatmap

Comme nous pouvons le voir, il n'y a pas beaucoup de lien entre les skills, sauf autour de la diagonale. Cela est normal, car nous avons récupéré les skills de la manière suivante (le tout était stocké dans un .json) :

Donc les rectangles blanc autour de la diagonale sont des skills présent dans le même job.

Dendograms

Ensuite, pour visualiser les liens entre chaque skills, nous avons voulu générer un dendogram en utilisant la méthode de linkage Average

Interprétations

Nous avons interprété le Heat map et le dendogram de la manière suivante :

Explications et solutions testées

Nous avons essayé de comprendre pourquoi il n'y avait pas de liens entre les skills.

Après analyse de la base de données, nous avons remarqué que 320 skills (exactement 1/3 des skills) n'apparraissaient que 1 seule fois dans un job. Ainsi, nous en avons déduis qu'1/3 des skills n'étaient pas exploitable pour notre problème.

En effet, pour calculer la distance entre les skills nous nous basons sur l'apparition de ceux-ci dans un même job.

Nous avons donc appliqué un filtre pour garder les skills apparraissant entre 2 et 100 fois (en effet, certains skills apparraissaient dans tous les jobs).

Heat map & dendogramme pour apparition > 1

En recalculant notre Heatmap, nous avons obtenu :

On peut voir qu'il y a un peu plus de liens entre les skills.

Les groupes se font un peu plus tôt, l'arbre est plus aéré.

Dendogramme pour apparition > 2 puis > 3

On voit alors qu'il y a beaucoup plus de liens tôt (la distance entre les sous groupes est de plus en plus faible et la formation d'un grand groupe est de plus en plus cohérente).

Questions

Scrapping pour utiliser la même méthode sur une base de données différente

Nous avons voulu voir ce que pouvais donner notre approche sur une autre base de données. Ainsi, nous avons fait du scrapping sur le site de Pôle Emploi :

Pour chaque job dans la base de données, nous avons recherché des skills.

Attention : Certains jobs ne sont pas assez précis ("Chef de projets" par exemple) et ressortent sur + 20 fiches métiers sur des domaines en tout genre. Nous avons retiré ceux que nous avons repéré, mais il se peut qu'il en reste. Aussi, nous n'avons pas vérifié la cohérence des skills sur un métier recherché, il se peut que des skills n'aient en réalité, rien à voir avec un job.

Sur les 349 skills dans la base de données, 148 ont été trouvés sur Pôle Emploi.

On peut voir ici qu'il y a beaucoup plus de liens entre les skills, on retrouve des distances faibles en dehors de la diagonale. Des groupes disctincts commencent à être formés relativement tôt dans l'arbre.

Filtre > 2

Filtre > 3

Pourquoi avons nous de meilleurs résultats ?

Étudions le nombre d'occurence des skills dans la base de données de Mooveo et les skills scrapped sur Pole Emploi.

L'occurence des skills dans les jobs ne permettent pas de comparer les deux BDD.

Étudions les distances entre chaque skill !

Pour ce faire, nous allons réutiliser la matrice de distance et faire la moyenne de ces distances pour chaque skill.

Mooveo

New skills

On peut voir que le second dataset a des distances plus faibles entre chaque skills. Cela s'explique par une redondance de groupe de skill dans les jobs et donc une meilleure construction des jobs et leurs skills.

Ne sachant pas à quel point la différence est importante et pour valider notre hypothèse, nous allons aussi étudier une matrice d'occurence entre chaque skill.

Ici, on peut voir que le skill Microsoft apparaît 10 fois avec Sauvegarde.

Dans 10 différents Jobs, nous verront Miscrosoft et Sauvegarde ensemble.
La diagonale corrsepond à l'occurence d'un skills dans tous les jobs. Nous l'avons passé à 0 pour ne pas biaisé les prochains calculs.

On voit donc que sur la base de données scrapped à partir de Pôle Emploi, les skills vont apparaître en moyenne deux fois plus avec d'autres skills que sur la BDD de Mooveo.

La BDD est donc plus hétérogène, plus diversifiée et est donc plus propice à du clustering.

De plus, la BDD PE contient des skills n'apparaissant qu'une fois, car non pertinent (exemple : Sciences religieuses et théologie, qui devait être lié à un job contenant de nombreuses fiches métiers.).

En nettoyant ce dataset, nous pourrions obtenir de bons résultats.